#include "main.h"

STRxDataFrame stRxData;
uint8_t ucPowerKeyTimer = 0;
uint8_t ucIndaLEDTimer = 0;

void UART0_IRQHandler(void)
{
    uint32_t ulUart0RXBuffFullIT = 0;
    uint32_t ulUart0RXBuffFullFlag = 0;
	uint8_t *pData = (uint8_t *)&stRxData.frame;

    ulUart0RXBuffFullIT = FL_UART_IsEnabledIT_RXBuffFull(UART0);
    ulUart0RXBuffFullFlag = FL_UART_IsActiveFlag_RXBuffFull(UART0);

    if((ulUart0RXBuffFullIT == 0x01UL) && (ulUart0RXBuffFullFlag == 0x01UL))
    {
        pData[stRxData.ucRxDataCnt++] = FL_UART_ReadRXBuff(UART0);
    }
	
	if((stRxData.frame.ucAryRxBuffer[stRxData.ucRxDataCnt - 2] == 0x0D) && (stRxData.frame.ucAryRxBuffer[stRxData.ucRxDataCnt - 1] == 0x0A))
	{
		SET_UART_RX_FINISH();
	}
}

void GPIO_IRQHandler(void)
{
    if(FL_GPIO_IsActiveFlag_EXTI(GPIO, FL_GPIO_EXTI_LINE_1) == 0x01UL)
    {
        FL_GPIO_ClearFlag_EXTI(GPIO, FL_GPIO_EXTI_LINE_1);
		
		SET_POWER_KEY_TIMER();
    }
}

void LPTIM_IRQHandler(void)
{
    if(FL_LPTIM32_IsEnabledIT_Update(LPTIM32) && FL_LPTIM32_IsActiveFlag_Update(LPTIM32))
    {
        FL_LPTIM32_ClearFlag_Update(LPTIM32);
		
		if(GET_POWER_KEY_TIMER())
		{
			if(FL_GPIO_GetInputPin(GPIOA, FL_GPIO_PIN_5) == 0x00UL)
			{
				ucPowerKeyTimer++;
				
				if(ucPowerKeyTimer >= 5) // 5*50ms=250ms
				{
					ucPowerKeyTimer = 0;
					CLR_POWER_KEY_TIMER();
					
					POWER_OFF();
				}
			}
			else
			{
				ucPowerKeyTimer = 0;
				CLR_POWER_KEY_TIMER();
			}
		}
		
		ucIndaLEDTimer++;
		if(ucIndaLEDTimer >= 5)
		{
			ucIndaLEDTimer = 0;
			FL_GPIO_ToggleOutputPin(GPIOC, FL_GPIO_PIN_8);
		}
    }
}
